[请教]单片机延时问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 05:32:44
//程序功能:控制一个信号灯闪烁

#include <reg51.h>
sbit P0_3 = P0^3;
void delay(unsigned char i);
void main()
{
while(1){
P0_3 = 0;
delay(2000);
P0_3 = 1;
delay(2000);
}
}

//延时函数:delay

void delay(unsigned char i)
{
unsigned char j,k;
for(k = 0;k<i;k++)
for(j = 0;j<255;j++);
}

按道理,延时的时间为执行i×255次循环指令的时间,那么i的数值越大 延时就越高,为什么我在输入delay(5000)后,反而灯比delay(2000)时闪烁频率更快了呢?

usigned char型数据的范围是0—255,5000超过了该范围,所以会出现意外结果。
你改为usigned int型就可以了。

你语法问题 i定义是UN CHAR 最大怎么会存入5000或2000呢 i不会超过255